package com.beans;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

import org.apache.hadoop.fs.FileStatus;

//import com.dao.HdfsHADao;
import com.dao.HdfsDao;

/**
 * 网盘文件信息实体类
 */
public class DiskFileInfo {
	private static Map<String,String>iconMap;
		
	/* 采用装饰模式设计 ,对FileStatus类进行装饰  */
	private FileStatus f;
	
	private String modificationTime;  //文件最后修改时间
	private String len;  //文件大小
	private String icon; //文件图标
	private String path; //文件路径 去掉了 hdfs://ip:端口/ 这样的前缀
	private String name; //文件名称 去掉了 hdfs://ip:端口/ 这样的前缀
	
	/* 通过构造函数把被装饰的对象传进来 */
	public DiskFileInfo(FileStatus f){
		this.f=f;
	}
	
	/* 根据文件的字节数,计算出较友好的显示形式 Byte, K, M, G , T 等 */
	public  String getLen() {
		// 1024 * 1024 =1M =1048576
		// 1024 * 1024 *1024  =1G  =1073741824
		// 1024 * 1024 *1024  =1T  =1099511627776 
		
		//如果是文件夹,不用显示大小
		if(f.isDirectory()){
			return "-"; 
		}
		
		float size=f.getLen();

		if(size>=1099511627776L){
			this.len= String.format("%.2f", size/1024/1024/1024/1024)+" P";
		}
		else if(size>=1073741824){
			this.len= String.format("%.2f", size/1024/1024/1024)+" G";
		}
		
		else if(size>=1048576){
			this.len= String.format("%.2f", size/1024/1024)+" M";
		}
		
		else if(size>1024)   {		
			this.len= String.format("%.2f", size/1024)+" K";
		}
		
		else{
			this.len= (long)size+ " Byte"; 
		}
		
		return this.len;	
	}

	/* 这个map用于映射文件名和图标的对应关系 */
	static {
		iconMap=new HashMap<String,String>();
		iconMap.put("folder", "folder.png");  //文件夹对应的图标是folder.png
		iconMap.put(".txt", "txtIcon.png");
		iconMap.put(".gz", "zipIcon.png");
		iconMap.put(".rar", "zipIcon.png");
		iconMap.put(".jar", "zipIcon.png");
		iconMap.put(".zip", "zipIcon.png");
		iconMap.put(".7z", "zipIcon.png");
		iconMap.put(".exe", "exeIcon.png");
		iconMap.put(".avi", "aviIcon.png");
		iconMap.put(".wmv", "aviIcon.png");
		iconMap.put(".gif", "picIcon.png");
		iconMap.put(".bmp", "picIcon.png");
		iconMap.put(".jpg", "picIcon.png");
		iconMap.put(".jpeg", "picIcon.png");
		iconMap.put(".png", "picIcon.png");
		iconMap.put(".pdf", "pdfIcons.png");
		iconMap.put(".xls", "xlsIcon.png");
		iconMap.put(".xlsx", "xlsIcon.png");
		iconMap.put(".doc", "wordIcon.png");
		iconMap.put(".docx", "wordIcon.png");
		iconMap.put(".java", "sourceCodeIcon.png");
		iconMap.put(".data", "aviIcon.png");
		iconMap.put(".mp3", "soundIcon.png");	
	}
	
	public String getModificationTime() {
		this. modificationTime= new SimpleDateFormat("yyyy/MM/dd hh:mm").format( new Date( f.getModificationTime()) );
		return  this.modificationTime;
	}

	public void setModificationTime(String modificationTime) {
		this.modificationTime = modificationTime;
	}
	
	

	public FileStatus getF() {
		return f;
	}

	public void setF(FileStatus f) {
		this.f = f;
	}
	
	
	public void setLen(String len) {
		this.len = len;
	}

	/* 根据文件扩展名, 得到其对应的图标名称  */
	public  String getIcon() {
		//如果是文件夹
		if(f.isDirectory()){
			this.icon= iconMap.get("folder");
		}
		else{
			String fileName=f.getPath().getName();
		
			//如果文件有扩展名
			if( fileName.lastIndexOf(".")!=-1){
				String fileExt= fileName.substring( fileName.lastIndexOf("."));	
				icon=iconMap.get(fileExt.toLowerCase());
			}
			
			//如果没有对应图标,则使用默认图标
			if(icon==null){
				this.icon="defaultIcon.png";
			}
		}
		
		return this.icon;
	}

	public void setIcon(String icon) {
		this.icon = icon;
	}

	public String getPath() {
		this.path=this.f.getPath().toString().replace(HdfsDao.HDFS_PATH, "");
		return path;
	}

	public void setPath(String path) {
		this.path = path;
	}

	public String getName() {
		this.name=this.f.getPath().getName().replace(HdfsDao.HDFS_PATH, "");
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
	
}
